//
// Created by LiuYou on 2021/8/20.
//

#ifndef HIGHPERFORMANCELINUXSERVERPROGRAMMING_LINUX2_HTTPCONNECTNEED_HPP
#define HIGHPERFORMANCELINUXSERVERPROGRAMMING_LINUX2_HTTPCONNECTNEED_HPP


/** 解析客户请求时, 主状态机所处的状态。
 * <p>
 * 三种状态，标识解析位置。
 * <p>
 *  CHECK_STATE_REQUEST_LINE，解析请求行
 * <p>
 *  CHECK_STATE_HEADER，解析请求头
 * <p>
 *  CHECK_STATE_CONTENT，解析消息体，仅用于解析POST请求
 */
enum class CheckState {
    CHECK_STATE_REQUEST_LINE = 0,
    CHECK_STATE_HEADER,
    CHECK_STATE_CONTENT
};

/** HTTP请求方法, 但我们仅支持 GET。*/
enum class Method {
    GET = 0,
    POST,
    HEAD,
    PUT,
    DELETE,
    TRACE,
    OPTIONS,
    CONNECT,
    PATCH
};

/** 服务器处理HTTP请求的可能结果。
 * <p>
 * 表示HTTP请求的处理结果，在头文件中初始化了八种情形，在报文解析时只涉及到四种。
 * <p>
 *   NO_REQUEST         请求不完整，需要继续读取请求报文数据
 * <p>
 *   GET_REQUEST        获得了完整的HTTP请求
 * <p>
 *   BAD_REQUEST        HTTP请求报文有语法错误
 * <p>
 *   INTERNAL_ERROR     服务器内部错误，该结果在主状态机逻辑switch的default下，一般不会触发
 */
enum class HttpCode {
    NO_REQUEST,
    GET_REQUEST,
    BAD_REQUEST,
    NO_RESOURCE,
    FORBIDDEN_REQUEST,
    FILE_REQUEST,
    INTERNAL_ERROR,
    CLOSED_CONNECTION
};

/** 从状态机。
 * <p>
 * 三种状态，标识解析一行的读取状态。
 * <p>
 *   LINE_OK，完整读取一行
 * <p>
 *   LINE_BAD，报文语法有误
 * <p>
 *   LINE_OPEN，读取的行不完整
 */
enum class LineStatus {
    LINE_OK = 0,
    LINE_BAD,
    LINE_OPEN
};

#endif //HIGHPERFORMANCELINUXSERVERPROGRAMMING_LINUX2_HTTPCONNECTNEED_HPP
